/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package control;

import entidad.Prestacion;
import frontera.dao.DAO;
import java.util.Calendar;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 *
 * @author Silex RPR
 */
public class AdministrarPrestaciones extends Administrar<Prestacion> {

    public String crearPrestacion(String nombre, String porcentajeEmpleado,String porcentajeCompañia){

        String informacionValidacion = validarInformacion(nombre, porcentajeEmpleado, porcentajeCompañia);

        Calendar cal = Calendar.getInstance();

        if ( informacionValidacion.equals("")){
            Prestacion nuevaPrestacion = new Prestacion(SIRHApp.getInstance().getCantidadPrestaciones() + 1
                                            , nombre, porcentajeEmpleado, porcentajeCompañia,cal);
            
            SIRHApp.getInstance().setCantidadPrestaciones(SIRHApp.getInstance().getCantidadPrestaciones() + 1);
            SIRHApp.getInstance().getSistema().agregarPrestacion(nuevaPrestacion);

            return "";
        }

        return informacionValidacion;
    }

    public String actualizarPrestacion(Prestacion prestacionAntigua, String nombre, String porcentajeEmpleado, String porcentajeCompañia){

        String informacionValidacion = validarInformacion(nombre, porcentajeEmpleado, porcentajeCompañia);
        Prestacion actPrestacion = prestacionAntigua;
        
        if ( informacionValidacion.equals("")){
            
            Calendar calendarioViejaPrestacion = Calendar.getInstance();
                        
            Prestacion nuevaPrestacion = new Prestacion(actPrestacion.getIdPrestacion(), nombre, porcentajeEmpleado,porcentajeCompañia, calendarioViejaPrestacion);
            getDAO().actualizar(actPrestacion, nuevaPrestacion);

            return "";
        }

        return informacionValidacion;
    }

    public boolean eliminarPrestacion(Prestacion borPrestacion){
        return ( SIRHApp.getInstance().getSistema().eliminarPrestacion( borPrestacion ) );
    }

    protected DAO<Prestacion> getDAO() {
        return SIRHApp.getInstance().getDAOPrestacion();
    }
    
    public String validarInformacion(String nombre, String porcentajeEmpleado,String porcentajeCompañia){
        
        if ( !verificarLongitudNombre(nombre)){
            return ("El nombre debe tener una longitud mínima de 3 caracteres y máxima de 30.");
        }

        if ( !verificarFormatoNombre(nombre)){
            return ("El nombre debe tener únicamente valores alfanuméricos.");
        }
        
        if ( !verificarFormatoPorcentaje(porcentajeEmpleado)){
            return("El valor de la prestación debe ser un numero. En caso de que la compañia o el empleado no tenga un porcentaje, escribir cero.");
        }

        if(!verificarValorPorcentaje(porcentajeEmpleado)){
            return("El valor de la prestacion debe ser mayor que cero. En caso de que la compañia o el empleado no tenga un porcentaje, escribir cero.");
        }

        if ( !verificarFormatoPorcentaje(porcentajeCompañia)){
            return("El valor de la prestación debe ser un numero. En caso de que la compañia o el empleado no tenga un porcentaje, escribir cero.");
        }

        if(!verificarValorPorcentaje(porcentajeCompañia)){
            return("El valor de la prestacion debe ser mayor que cero. En caso de que la compañia o el empleado no tenga un porcentaje, escribir cero.");
        }

        return("");
    }

    public boolean verificarLongitudNombre(String nombre){
        return ( nombre.length() >= 3 && nombre.length() <= 30);
    }

    public boolean verificarFormatoNombre(String nombre){

        Pattern patternClave = Pattern.compile("[^A-Za-z0-9ñáéíóú ]");
        Matcher matcherClave = patternClave.matcher(nombre);

        boolean resultado = matcherClave.find();
        return (!resultado);

    }
    
    public boolean verificarValorPorcentaje(String porcentaje){
        boolean parse=true;

        float tmp = Float.parseFloat(porcentaje);
        if(tmp<0){
            parse = false;
        }

         return parse;
    }

    public boolean verificarFormatoPorcentaje(String porcentaje){
        boolean parse;

        try
        {
            Float.parseFloat(porcentaje);
            parse = true;
        }
        catch(NumberFormatException NFE){
            parse = false;
        }

        return parse;
    }
}
